<!doctype html>
<html lang="zh-CN">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="referrer" content="no-referrer-when-downgrade">
    

    <title>Mysql | matrix</title>
    <meta property="og:title" content="Mysql - matrix">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content='2021-01-16T14:30:24&#43;08:00'>
        
        
    <meta property="article:modified_time" content='2021-01-16T14:30:24&#43;08:00'>
        
    <meta name="Keywords" content="golang,go语言,go语言笔记,飞雪无情,java,android,博客,项目管理,python,软件架构,公众号,小程序">
    <meta name="description" content="Mysql">
        
    <meta name="author" content="matrix">
    <meta property="og:url" content="/post/Mysql%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%E7%AE%A1%E7%90%86/">
    <link rel="shortcut icon" href='/favicon.ico'  type="image/x-icon">

    <link rel="stylesheet" href='/css/normalize.css'>
    <link rel="stylesheet" href='/css/style.css'>
    <script type="text/javascript" src="//cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    
    
    
        <link href="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" rel="stylesheet">
    
    
    
    
        <link rel="stylesheet" href='/css/douban.css'>
    
        <link rel="stylesheet" href='/css/other.css'>
    
</head>


<body>
    <header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="/">
                        matrix
                    </a>
                
                <p class="description">专注于Android、Java、Go语言(golang)、移动互联网、项目管理、软件架构</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="/">首页</a>
                    
                    <a  href="/notebook/" title="笔记">笔记</a>
                    
                    <a  href="/archives/" title="归档">归档</a>
                    
                    <a  href="/about/" title="关于">关于</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>

    <div id="body">
        <div class="container">
            <div class="col-group">

                <div class="col-8" id="main">
                    
<div class="res-cons">
    <style type="text/css">
    .post-toc {
        position: fixed;
        width: 200px;
        margin-left: -210px;
        padding: 5px 10px;
        font-family: Athelas, STHeiti, Microsoft Yahei, serif;
        font-size: 12px;
        border: 1px solid rgba(0, 0, 0, .07);
        border-radius: 5px;
        background-color: rgba(255, 255, 255, 0.98);
        background-clip: padding-box;
        -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        word-wrap: break-word;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        z-index: 999;
        cursor: pointer;
        max-height: 70%;
        overflow-y: auto;
        overflow-x: hidden;
    }

    .post-toc .post-toc-title {
        width: 100%;
        margin: 0 auto;
        font-size: 20px;
        font-weight: 400;
        text-transform: uppercase;
        text-align: center;
    }

    .post-toc .post-toc-content {
        font-size: 15px;
    }

    .post-toc .post-toc-content>nav>ul {
        margin: 10px 0;
    }

    .post-toc .post-toc-content ul {
        padding-left: 20px;
        list-style: square;
        margin: 0.5em;
        line-height: 1.8em;
    }

    .post-toc .post-toc-content ul ul {
        padding-left: 15px;
        display: none;
    }

    @media print,
    screen and (max-width:1057px) {
        .post-toc {
            display: none;
        }
    }
</style>
<div class="post-toc" style="position: absolute; top: 188px;">
    <h2 class="post-toc-title">文章目录</h2>
    <div class="post-toc-content">
        <nav id="TableOfContents">
  <ul>
    <li><a href="#第1章-数据库介绍及mysql安装">第1章 数据库介绍及mysql安装</a></li>
    <li><a href="#11-数据库简介">1.1 数据库简介</a>
      <ul>
        <li><a href="#111-什么是数据">1.1.1 什么是数据</a></li>
        <li><a href="#112-数据库管理系统">1.1.2 数据库管理系统</a></li>
        <li><a href="#113-nosql特性总览">1.1.3 NoSQL特性总览</a></li>
        <li><a href="#114-nosql的分类特点典型产品">1.1.4 NoSQL的分类、特点、典型产品</a></li>
      </ul>
    </li>
    <li><a href="#12-数据库相关产品">1.2 数据库相关产品</a>
      <ul>
        <li><a href="#121-oracle公司产品介绍">1.2.1 Oracle公司产品介绍</a></li>
        <li><a href="#122-其他公司产品">1.2.2 其他公司产品</a></li>
      </ul>
    </li>
    <li><a href="#13-mysql简介">1.3 Mysql简介</a>
      <ul>
        <li><a href="#131-mysql数据库发展史">1.3.1 mysql数据库发展史</a></li>
        <li><a href="#132-mysql的特点简介">1.3.2 MySQL的特点简介</a></li>
        <li><a href="#133-mysql产品线的介绍">1.3.3 mysql产品线的介绍</a></li>
        <li><a href="#134-企业生产场景选择mysql数据库建议">1.3.4 企业生产场景选择MySQL数据库建议：</a></li>
      </ul>
    </li>
    <li><a href="#14-mysql数据库的安装">1.4 mysql数据库的安装</a>
      <ul>
        <li><a href="#141-系统环境说明">1.4.1 系统环境说明</a></li>
      </ul>
    </li>
    <li><a href="#142-mysql编译安装">1.4.2 mysql编译安装</a>
      <ul>
        <li><a href="#143-数据库安装后的操作">1.4.3 数据库安装后的操作</a></li>
        <li><a href="#144-数据库安全设置">1.4.4 数据库安全设置</a></li>
      </ul>
    </li>
    <li><a href="#15-mysql-57版本安装说明">1.5 mysql 5.7版本安装说明</a>
      <ul>
        <li></li>
      </ul>
    </li>
  </ul>

  <ul>
    <li><a href="#21-客户端与服务器端模型">2.1 客户端与服务器端模型</a>
      <ul>
        <li><a href="#211-mysql服务结构">2.1.1 mysql服务结构</a></li>
        <li><a href="#212-mysql连接方式">2.1.2 mysql连接方式</a></li>
        <li><a href="#213-mysql在启动过程">2.1.3 MySQL在启动过程</a></li>
      </ul>
    </li>
    <li><a href="#22-mysqld服务的构成">2.2 Mysqld服务的构成</a>
      <ul>
        <li><a href="#221-连接层">2.2.1 连接层</a></li>
        <li><a href="#222-sql层">2.2.2 SQL层</a></li>
        <li><a href="#223-存储引擎层">2.2.3 存储引擎层</a></li>
        <li><a href="#224-依赖于存储引擎的功能">2.2.4 依赖于存储引擎的功能</a></li>
        <li><a href="#225-mysql-的逻辑构成数据库内部结构">2.2.5 mysql 的逻辑构成(数据库内部结构)</a></li>
        <li><a href="#226-mysql的存储方式">2.2.6 mysql的存储方式</a></li>
        <li><a href="#227-mysql体系结构小结">2.2.7 MySQL体系结构小结</a></li>
      </ul>
    </li>
    <li><a href="#23-mysql管理">2.3 MySQL管理</a>
      <ul>
        <li><a href="#231-连接管理mysql">2.3.1 连接管理：mysql</a></li>
        <li><a href="#232-数据库的启动流程">2.3.2 数据库的启动流程</a></li>
        <li><a href="#233-mysql的关闭方法">2.3.3 mysql的关闭方法</a></li>
        <li><a href="#234-mycnf-配置文件说明">2.3.4 my.cnf 配置文件说明</a></li>
        <li><a href="#235-配置文件的读取过程">2.3.5 配置文件的读取过程</a></li>
      </ul>
    </li>
    <li><a href="#24-mysql多实例配置">2.4 mysql多实例配置</a>
      <ul>
        <li><a href="#241-什么是mysql多实例">2.4.1 什么是MySQL多实例？</a></li>
        <li><a href="#242-mysql多实例的作用与问题">2.4.2 MySQL多实例的作用与问题</a></li>
        <li><a href="#243-多实例配置思路">2.4.3 多实例配置思路</a></li>
        <li><a href="#244-多实例配置过程">2.4.4 多实例配置过程</a></li>
        <li><a href="#245-多实例mysql的使用">2.4.5 多实例mysql的使用</a></li>
        <li><a href="#246-关于mysql多实例的选择">2.4.6 关于mysql多实例的选择</a></li>
      </ul>
    </li>
    <li><a href="#25-mysql忘记密码怎么办">2.5 mysql忘记密码怎么办？</a></li>
    <li><a href="#26-参考文献">2.6 参考文献</a></li>
  </ul>
</nav>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {
        var postToc = $(".post-toc");
        if (postToc.length) {
            var leftPos = $("#main").offset().left;
            if(leftPos<220){
                postToc.css({"width":leftPos-10,"margin-left":(0-leftPos)})
            }

            var t = postToc.offset().top - 20,
                a = {
                    start: {
                        position: "absolute",
                        top: t
                    },
                    process: {
                        position: "fixed",
                        top: 20
                    },
                };
            $(window).scroll(function () {
                var e = $(window).scrollTop();
                e < t ? postToc.css(a.start) : postToc.css(a.process)
            })
        }
    })
</script>
    <article class="post">
        <header>
            <h1 class="post-title">Mysql</h1>
        </header>
        <date class="post-meta meta-date">
            2021年1月16日
        </date>
        
        <div class="post-meta">
            <span>|</span>
            
            <span class="meta-category"><a href='/categories/Mysql'>Mysql</a></span>
            
        </div>
        
        
        <div class="post-meta">
            <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span>
                    阅读</span></span>
        </div>
        
        
        <div class="clear" style="display: none">
            <div class="toc-article">
                <div class="toc-title">文章目录</div>
            </div>
        </div>
        
        <div class="post-content">
            <h2 id="第1章-数据库介绍及mysql安装">第1章 数据库介绍及mysql安装</h2>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/GLxY4SsgbCwumWU.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/GLxY4SsgbCwumWU.png" />
        </a>
    
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/TLRA1JkUVSPZQlz.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/TLRA1JkUVSPZQlz.png" />
        </a>
    </p>
<h2 id="11-数据库简介">1.1 数据库简介</h2>
<p>　　数据库，简而言之可视为电子化的文件柜——存储电子文件的处所，用户可以对文件中的数据运行新增、截取、更新、删除等操作。</p>
<p>　　所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。</p>
<h3 id="111-什么是数据">1.1.1 什么是数据</h3>
<p>　　数据是指对客观事件进行记录并可以鉴别的符号，是对客观 事物的性质、状态以及相互关系等进行记载的物理符号或这些物 理符号的组合。它是可识别的、抽象的符号。</p>
<h3 id="112-数据库管理系统">1.1.2 数据库管理系统</h3>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/YFbSJ7Q4ILhyA9s.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/YFbSJ7Q4ILhyA9s.png" />
        </a>
    </p>
<p><strong>非关系型数据库</strong></p>
<p>　　NoSQL：非关系型数据库（Not only SQL）</p>
<pre><code>不是否定关系型数据库，做关系型数据库的的补充。
想做老大，先学会做老二。
</code></pre><p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/3tkVO4yefERwmHz.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/3tkVO4yefERwmHz.png" />
        </a>
    </p>
<p><strong>关系型数据库</strong></p>
<p>　　关系型数据库的特点</p>
<pre><code>二维表
典型产品 Oracle传统企业，MySQL是互联网企业
数据存取是通过SQL(结构化查询语句)
最大特点，数据安全性方面强（ACID） 
</code></pre><h3 id="113-nosql特性总览">1.1.3 NoSQL特性总览</h3>
<p>　　l 不是否定关系型数据库，而是作为补充，现在也有部分替代的趋势。</p>
<p>　　l 关注高性能，高并发，灵活性，忽略和上述无关的功能。</p>
<p>　　l 现在也在提升安全性和使用功能。</p>
<p>　　l 典型产品：Redis（持久化缓存，两个半天）、MongoDB（最接近关系型数据 的NoSQL）、Memcached。</p>
<p>　　l 管理不适用SQL管理，而是用一些特殊的 API 或 数据接口。</p>
<h3 id="114-nosql的分类特点典型产品">1.1.4 NoSQL的分类、特点、典型产品</h3>
<p>　　键值（KV）存储：Memcached、Redis</p>
<p>　　列存储（column-oriented）：HBASE(新浪，360)、Cassandra（200台服务器集群 ）</p>
<p>　　文档数据库（document-oriented）：MongoDB（最接近关系型数据库的NoSQL）</p>
<p>　　图形存储（Graph）：Neo4j</p>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/uNC9EcMxb2eIOy6.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/uNC9EcMxb2eIOy6.png" />
        </a>
    </p>
<p>　　　　数据来源： <a href="https://db-engines.com/en/ranking">https://db-engines.com/en/ranking</a></p>
<h2 id="12-数据库相关产品">1.2 数据库相关产品</h2>
<h3 id="121-oracle公司产品介绍">1.2.1 Oracle公司产品介绍</h3>
<p>　　<strong>Oracle</strong>数据库版本介绍</p>
<p>　　　　7&ndash;8i&ndash;9i&ndash;10g—11g&ndash;12c&ndash;18c(?)</p>
<p>　　<strong>Oracle****的市场应用</strong></p>
<p>　　　　a) 市场份额第一，趋势递减</p>
<p>　　　　b) 市场空间，传统企业</p>
<p>　　　　c) 传统企业也在互联网化</p>
<p>　　<strong>MySQL****数据库版本介绍</strong></p>
<p>　　　　5.0&ndash;5.1&ndash;5.5&ndash;5.6&ndash;5.7&ndash;8.0</p>
<p>　　<strong>MySQL****的市场应用</strong></p>
<p>　　　　a) 中、大型互联网公司</p>
<p>　　　　b) 市场空间：互联网领域第一</p>
<p>　　　　c) 趋势明显</p>
<p>　　　　d) 同源产品：MariaDB、perconaDB</p>
<h3 id="122-其他公司产品">1.2.2 其他公司产品</h3>
<p>　　<strong>微软：SQL Server</strong></p>
<pre><code>微软和sysbase合作开发的产品，后来自己开发,windows平台
3,4线小公司，传统行业在用
</code></pre><p>　　<strong>IBM</strong> <strong>：DB2****数据库</strong></p>
<p>　 市场占有量小</p>
<p>　　  目前只有：国有银行（人行、中国银行、工商银行等）、中国移动应用。</p>
<p><strong>下面三者广泛应用在大型互联网公司</strong></p>
<pre><code>　　PostgreSQL
　　MongoDB
　　Redis
</code></pre><h2 id="13-mysql简介">1.3 Mysql简介</h2>
<h3 id="131-mysql数据库发展史">1.3.1 mysql数据库发展史</h3>
<pre><code>1 1979年，报表工具Unireg出现。
2 1985 年，以瑞典David Axmark 为首，成立了一家公司（AB前身），IASM引擎出现。
3 1990年，提供SQL支持。
4 1999-2000年，MySQL AB公司成立，并公布源码，开源化。
5 2000年4月BDB引擎出现，支持事务。
6 2008年1月16日，Sun（太阳微系统）正式收购MySQL。
7 2009年4月20日，甲骨文公司宣布以每股9.50美元，74亿美元的总额收购Sun电脑公司，MySQL 转入Oracle 门下。
8 2013年6月18日，甲骨文公司修改MySQL授权协议，移除了GPL。但随后有消息称这是一个bug。
</code></pre><h3 id="132-mysql的特点简介">1.3.2 MySQL的特点简介</h3>
<p>　　开源、社区版免费、简单，使用方便，可靠、稳定、安全、社区活跃</p>
<h3 id="133-mysql产品线的介绍">1.3.3 mysql产品线的介绍</h3>
<p><strong>mysql****产品线（主线）</strong></p>
<p>　　***3.26&ndash;5.2****<strong>版本*</strong></p>
<p>　　　　– 正宗后代</p>
<p>　　　　– Centos5、6中默认有5.1版本</p>
<p>　　　　– Centos7中默认是MariaDB</p>
<p>　　<strong>5.4&ndash;5.7</strong> <strong>，8.0****版本</strong></p>
<p>　　　　– 借鉴社区好的贡献，进一步开发的版本</p>
<p>　　　　– 主流版本：5.5 5.6 5.7</p>
<p>　　*<strong>MySQL Cluster 6.0*</strong> ***版本&amp;****<strong>更高*</strong></p>
<p>　　　　– 类似于Oracle RAC，硬件要求高。</p>
<p>　　　　– 一般各大网站没有人用</p>
<p>​     **mysql****产品线(**<strong>派生产品)</strong></p>
<p>​         派生版本有Drizzle、MariaDB、Percona Server及OurDelta等。</p>
<h3 id="134-企业生产场景选择mysql数据库建议">1.3.4 企业生产场景选择MySQL数据库建议：</h3>
<pre><code>1） 稳定版：选择开源的社区版的稳定版GA版本 
2） 产品线：可以选择5.1或5.5 互联网公司主流5.5，其次是5.1和5.6 
3） 选择MySQL数据库GA版发布后6个月以上的GA版本。 
4）要选择前后几个月没有大的BUG修复的版本，而不是大量修复BUG的集中版本 
5）最好向后较长时间没有更新发布的版本 
6）要考虑开发人员开发程序使用的版本是否兼容你选的版本 
7）作为内部开发人员开发测试数据库环境，跑大概3-6个月的事件 
8）优先企业非核心业务采用新版本的数据库GA版本软件 
9）向DBA高手请教，或者在及技术氛围好的群里和大家一起交流，使用真正的高手们用过的好用的GA版本产品
10）若是没有重要的功能BUG或性能瓶颈，则可以开始考虑作为任何任务数据服务的后端数据库软件
</code></pre><h2 id="14-mysql数据库的安装">1.4 mysql数据库的安装</h2>
<h3 id="141-系统环境说明">1.4.1 系统环境说明</h3>
<pre><code>[root@db02 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@db02 ~]# uname -r
2.6.32-696.el6.x86_64
[root@db02 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@db02 ~]# getenforce 
Disabled
[root@db02 ~]# hostname  -I 
10.0.0.52 172.16.1.52
</code></pre><h2 id="142-mysql编译安装">1.4.2 mysql编译安装</h2>
<p>　　安装依赖包</p>
<pre><code>yum  install  -y  ncurses-devel libaio-devel
</code></pre><p>　　安装cmake编译工具</p>
<p>　　<strong>cmake</strong></p>
<p>　　定制功能：存储引擎、字符集、压缩等</p>
<p>　　定制安装位置、数据存储位置、文件位置（socket）</p>
<pre><code>yum install cmake -y
</code></pre><p>　　创建mysql管理用户</p>
<pre><code>useradd -s /sbin/nologin -M mysql -u1000
id mysql
</code></pre><p>　　下载mysql软件包，解压</p>
<pre><code>mkdir  -p /server/tools 
cd /server/tools
wget -q http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.40.tar.gz
tar xf mysql-5.6.40.tar.gz
</code></pre><p>​     注：这里使用的是sohu的镜像源进行下载（软件版本5.6.40）</p>
<pre><code>　　　　官方下载方式参考：http://www.cnblogs.com/clsn/p/8025324.html#_label4
</code></pre><p>进入查询目录，使用cmake进行编译，安装，创建软连接，过程时间较长。</p>
<pre><code>cd mysql-5.6.40
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.40 \
-DMYSQL_DATADIR=/application/mysql-5.6.40/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.40/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
make &amp;&amp; make install
ln -s /application/mysql-5.6.40/ /application/mysql
</code></pre><h3 id="143-数据库安装后的操作">1.4.3 数据库安装后的操作</h3>
<p>　　<strong>复制配置文件</strong></p>
<pre><code>\cp  /application/mysql/support-files/my-default.cnf /etc/my.cnf
</code></pre><p>　　编译的MySQL可以暂时不需要设置配置文件。</p>
<blockquote>
<p>　 注意：如果以前操作系统中安装过rpm格式的mysql，系统中可能会遗留/etc/my.cnf文件，我们需要将它删除掉</p>
</blockquote>
<p>　</p>
<p><strong>初始化数据库</strong></p>
<pre><code>/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
</code></pre><p>　　**防止报错：**数据库启动会提示，找不到xx/tmp/mysql.sock,原因是5.6.40版本不会自动创建tmp目录，需要我们手工创建。</p>
<pre><code>mkdir /application/mysql/tmp
</code></pre><p>　　修改程序目录的属主，属组</p>
<pre><code>chown -R mysql.mysql /application/mysql/
</code></pre><p>　　复制启动脚本，并修改权限</p>
<pre><code>cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
</code></pre><p>　　<strong>添加环境变量，使用mysql****命令</strong></p>
<pre><code>echo 'PATH=/application/mysql/bin/:$PATH' &gt;&gt;/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
mysql
</code></pre><h3 id="144-数据库安全设置">1.4.4 数据库安全设置</h3>
<p>　　设置root用户密码</p>
<pre><code>mysqladmin -u root password '123456'
mysql -uroot -p123456
</code></pre><p>　　优化数据库（清理用户及无用数据库）</p>
<pre><code>select user,host from mysql.user;
drop user ''@'db02';
drop user ''@'localhost';
drop user 'root'@'db02';
drop user 'root'@'::1';
select user,host from mysql.user;
drop database test;
show databases;
</code></pre><h2 id="15-mysql-57版本安装说明">1.5 mysql 5.7版本安装说明</h2>
<p>　　主机系统环境说明</p>
<pre><code>[root@db13 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@db13 ~]# uname -r
2.6.32-696.el6.x86_64
[root@db13 ~]# getenforce
Disabled
[root@db13 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@db13 ~]# hostname -I
10.0.0.153 172.16.1.153
</code></pre><p>　　获取软件（采用二进制包方式进行安装）</p>
<pre><code>mkdir -p /server/tools
cd /server/tools
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
</code></pre><p>　　解压</p>
<pre><code>tar xf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
</code></pre><p>　　将软件移动到程序目录，创建软连接</p>
<pre><code>mkdir -p /application/
mv mysql-5.7.17-linux-glibc2.5-x86_64 /application/mysql-5.7.17
ln -s /application/mysql-5.7.17 /application/mysql
</code></pre><p>　　添加mysql用户，并进行授权</p>
<pre><code>useradd -M -s /sbin/nologin  -u 1000 mysql
chown -R mysql.mysql /application/mysql-5.7.17
</code></pre><p>　　初始化数据库</p>
<pre><code>/application/mysql-5.7.17/bin/mysqld --initialize --user=mysql --basedir=/application/mysql-5.7.17 --datadir=/application/mysql-5.7.17/data
</code></pre><p>​     <strong>初始化时注意最后一行输出root****密码</strong></p>
<pre><code>2017-12-13T08:40:31.760309Z 1 [Note] A temporary password is generated for root@localhost: )*1E7=fYd&amp;&gt;i
</code></pre><h4 id="设置配置文件和启动文件">　　设置配置文件和启动文件</h4>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">创建mysql配置文件my.cnf

cat &gt;/etc/my.cnf <span style="color:#d14">&lt;&lt;EOF
</span><span style="color:#d14">[mysqld]
</span><span style="color:#d14">user=mysql
</span><span style="color:#d14">basedir=/application/mysql-5.7.17
</span><span style="color:#d14">datadir=/application/mysql-5.7.17/data
</span><span style="color:#d14">socket=/tmp/mysql.sock
</span><span style="color:#d14">port=3306
</span><span style="color:#d14">[mysql]
</span><span style="color:#d14">socket=/tmp/mysql.sock
</span><span style="color:#d14">EOF</span>



<span style="color:#998;font-style:italic"># cp \application/mysql-5.7.17/support-files/mysql.server  /etc/init.d/mysqld</span>

 service mysqld start  启动方式
</code></pre></td></tr></table>
</div>
</div><blockquote>
<p>mysql.sock是可用于本地服务器的套接字文件。它只是另一种连接机制。不包含任何数据，但仅用于从客户端到本地服务器来进行交换数据。自动产生，用于socket 连接</p>
<p>/tmp目录是一个系统产生临时文件的存放目录，同时每个用户都可以对他进行读写操作</p>
<p>init.d 目录中存放的是一系列系统服务的管理（启动与停止）脚本。</p>
<p>用service命令可执行init.d目录中相应服务的脚本。</p>
</blockquote>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">
</code></pre></td></tr></table>
</div>
</div><p><strong>修改启动文件内容（配置目录）</strong></p>
<blockquote>
<p>　　将程序安装到 /usr/local/ 下 可以省略这步操作</p>
<div class="highlight"><div style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sed <span style="color:#d14">&#39;s#/usr/local#/application#g&#39;</span> /application/mysql-5.7.17/bin/mysqld_safe /etc/init.d/mysqld -i
</code></pre></td></tr></table>
</div>
</div></blockquote>
<p>　　启动mysql</p>
<pre><code>[root@db13 tools]# /etc/init.d/mysqld start 
Starting MySQL.Logging to '/application/mysql/data/db13.err'.
 SUCCESS! 
[root@db13 tools]# /etc/init.d/mysqld status
 SUCCESS! MySQL running (1509)
</code></pre><p>　　<strong>添加环境变量</strong></p>
<pre><code>echo 'PATH=/application/mysql/bin/:$PATH' &gt;&gt;/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
</code></pre><p>修改mysql密码</p>
<pre><code>[root@db13 tools]# mysqladmin -uroot -p password 123456
Enter password: 【输入初始化时生成的密码】
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
</code></pre><h1 id="第2章-mysql体系结构与基本管理">第2章 Mysql体系结构与基本管理</h1>
<h2 id="21-客户端与服务器端模型">2.1 客户端与服务器端模型</h2>
<h3 id="211-mysql服务结构">2.1.1 mysql服务结构</h3>
<p>mysql是一个典型的c/s模式，服务端与客户端两部分组成</p>
<pre><code>        服务端程序 mysqld
        客户端程序 mysql自带客户端（mysql、mysqladmin、mysqldump等）
                  第三方客户端  API接口（php-mysql）
</code></pre><p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/5bdtqy43akIwcmM.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/5bdtqy43akIwcmM.png" />
        </a>
    </p>
<h3 id="212-mysql连接方式">2.1.2 mysql连接方式</h3>
<p><strong>TCP/IP</strong> <strong>连接</strong>  网络连接串(通过用户名 密码 IP 端口进行连接)</p>
<pre><code>mysql -uroot -p123 -h 127.0.0.1 -P 3306
</code></pre><p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/ofaJQnU1XpPW7tE.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/ofaJQnU1XpPW7tE.png" />
        </a>
    </p>
<p><strong>socket</strong> <strong>连接</strong>  网络套接字(用户名 密码 socket文件)</p>
<pre><code>mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock 
</code></pre><p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/1bpJGEMDi92CQuL.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/1bpJGEMDi92CQuL.png" />
        </a>
    </p>
<p>在linux中使用mysql命令不加其他的参数连接方式即</p>
<pre><code>mysql -uroot -poldboy123使用的是套接字文件方式登录的
</code></pre><h3 id="213-mysql在启动过程">2.1.3 MySQL在启动过程</h3>
<p>　　启动后台守护进程，并生成工作线程</p>
<p>　　预分配内存结构供MySQL处理数据使用</p>
<p>　　**实例就是MySQL****的后台进程+****线程+**<strong>预分配的内存结构</strong></p>
<h2 id="22-mysqld服务的构成">2.2 Mysqld服务的构成</h2>
<p>
        <a data-fancybox="gallery" href="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172541076-542631194.png">
            <img class="mx-auto" alt="img" src="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172541076-542631194.png" />
        </a>
    </p>
<h3 id="221-连接层">2.2.1 连接层</h3>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/kZzRKvWSUifTIgF.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/kZzRKvWSUifTIgF.png" />
        </a>
    </p>
<ul>
<li>通讯协议为：tcp/ip 或 socket</li>
<li>连接线程 为连接的数量</li>
<li>用户验证 为通过用户名 密码验证进行通讯协议</li>
</ul>
<h3 id="222-sql层">2.2.2 SQL层</h3>
<p>
        <a data-fancybox="gallery" href="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172601263-2057573575.png">
            <img class="mx-auto" alt="img" src="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172601263-2057573575.png" />
        </a>
    </p>
<p>　　sql即结构化的查询语句（数据库内部逻辑语言）sql92 sql99</p>
<p>　　<strong>DDL 数据库定义语言</strong></p>
<p>　　<strong>DCL 数据库控制语言</strong></p>
<p>　　<strong>DML 数据库操作语言</strong></p>
<p>　　<strong>DQL 数据查询语言</strong></p>
<p>SQL层的功能： select * from wordpress.user;</p>
<pre><code>1、判断语法、语句、语义
    判断语句类型 
2、数据库不能直接响应sql语句
    必须明确的知道数据在哪个磁盘  
3、数据库对象授权情况判断
    授权失败不继续
4、解析(解析器)
    将sql语句解析成执行计划，运行执行计划，生成找数据的方式
5、优化 (优化器)
    运行执行计划
   5.6之后 基于代价的算法，从执行计划中选择代价最小的交给&quot;执行器&quot;
6、&quot;执行器&quot;
    运行执行计划 
    最终生产如何去磁盘找数据方式
7、将取数据的方式，交由下层(存储引擎层)进行处理

8、最终将取出的数据抽象成管理员或用户能看懂的方式(表)，展现在用户面前

9、查询缓存： 缓存之前查询的数据。
    假如我们查询的表是一个经常有变动的表，查询缓存不要设置太大　　
</code></pre><p>　　<strong>SQL****层处理流程</strong></p>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/vzGySqlQJd2bEAI.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/vzGySqlQJd2bEAI.png" />
        </a>
    </p>
<h3 id="223-存储引擎层">2.2.3 存储引擎层</h3>
<p>　　由上层决定存储方式</p>
<p>　　　　存储引擎是充当不同表类型的处理程序的服务器组件。</p>
<p>
        <a data-fancybox="gallery" href="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172641795-1437750178.png">
            <img class="mx-auto" alt="img" src="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214172641795-1437750178.png" />
        </a>
    </p>
<p>　　<strong>存储引擎层功能：</strong></p>
<p>　　　　存数据、取数据</p>
<p>　　　　数据的不同存储方式</p>
<p>*<strong>不同的管理方式：*</strong></p>
<p>　   事务（增、删、改）</p>
<p>　　  备份恢复</p>
<p>　　  高级功能（高可用的架构、读写分离架构）</p>
<h3 id="224-依赖于存储引擎的功能">2.2.4 依赖于存储引擎的功能</h3>
<p>存储引擎是充当不同表类型的处理程序的服务器组件。</p>
<p><strong>存储引擎用于：</strong></p>
<pre><code>存储数据、检索数据、通过索引查找数据
        存储介质、  事务功能、  锁定、备份和恢复、优化
</code></pre><p>　　特殊功能：</p>
<pre><code>全文搜索、引用完整性、空间数据处理    
</code></pre><p>　　双层处理</p>
<pre><code>上层包括SQL解析器和优化器、下层包含一组存储引擎
</code></pre><p>　　SQL 层不依赖于存储引擎：</p>
<pre><code>引擎不影响SQL处理
</code></pre><h3 id="225-mysql-的逻辑构成数据库内部结构">2.2.5 mysql 的逻辑构成(数据库内部结构)</h3>
<p>　　逻辑构成是为了用户能够读懂数据出现的，让你更好的理解数据。</p>
<p>　　管理数据的一种方式。</p>
<pre><code>对象：
            库中包含表，在linux中以目录表示
            表中有列结构与行记录，在linux中以多个文件表示
                行记录
                列结构
</code></pre><p>　　切换库</p>
<pre><code>mysql&gt; use mysql;
</code></pre><p>　　查看表</p>
<pre><code>mysql&gt; show tables;
</code></pre><p>　　查看列的信息（记录）</p>
<pre><code>mysql&gt; desc user;
</code></pre><h3 id="226-mysql的存储方式">2.2.6 mysql的存储方式</h3>
<p>​     程序文件随数据目录一起存储在服务器安装目录下。执行各种客户机程序、管理程序和实用程序时将创建程序可执行文件和日志文件。首要使用磁盘空间的是数据目录。</p>
<p>服务器日志文件和状态文件：</p>
<p>　　包含有关服务器处理的语句的信息。日志可用于进行故障排除、监视、复制和恢复。</p>
<p>　　<strong>InnoDB</strong> <strong>日志文件：</strong> （适用于所有数据库）驻留在数据目录级别。</p>
<p>　　<strong>InnoDB</strong> <strong>系统表空间：</strong>  包含数据字典、撤消日志和缓冲区。</p>
<p>​     每个数据库在数据目录下均具有单一目录（无论在数据库中创建何种类型的表）。数据库目录存储以下内容：</p>
<pre><code>数据文件：
     特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息，具体取决于所使用的存储引擎。
格式文件 (.frm)：
　　　包含每个表和/或视图结构的说明，位于相应的数据库目录中。
触发器：
     与某个表关联并在该表发生特定事件时激活的命名数据库对象。
</code></pre><p>　　数据目录的位置取决于配置、操作系统、安装包和分发。典型位置是 /var/lib/mysql。</p>
<p>　　MySQL 在磁盘上存储系统数据库 (mysql)。</p>
<p>　　mysql 包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。</p>
<h3 id="227-mysql体系结构小结">2.2.7 MySQL体系结构小结</h3>
<p><strong>sql</strong> <strong>优化相关的理念</strong></p>
<p>​      解析器 ： 执行计划 数据库执行sql的一种方式</p>
<p>​      优化器 ： 知道基本规则，直接影响将来选择哪个执行计划</p>
<p>​      查询缓存 ： 生产环境中，一般会用redis memcached 来代替</p>
<p><strong>逻辑结构</strong></p>
<p><em>库</em>  就是一个目录，为了存放多张表</p>
<p><em>表</em>  在相应的库中，用多个文件来表示</p>
<p>​          myisam表 3个文件：（.myd数据文件 .myi索引文件 frm表 结构定义文件）</p>
<p>​          innodb： 2个或者一个，共享表空间（ibdata1 基表 元数据）、独立表空间(5.6以后默认的表存储方式)</p>
<p><strong>如何使用磁盘</strong></p>
<p>​     1、多个库多个目录，目录下存放了多个表的存储文件</p>
<p>​     2、 auto.cnf      db02.err      db02.pid      ibdata1       ib_logfile0    ib_logfile1         等</p>
<h2 id="23-mysql管理">2.3 MySQL管理</h2>
<h3 id="231-连接管理mysql">2.3.1 连接管理：mysql</h3>
<pre><code>[root@db02 ~]# mysql --help
-u &lt;user_name&gt; 或 --host=&lt;user_name&gt;
-p&lt;password&gt;
-h &lt;host_name&gt; 或 --host=&lt;host_name&gt;
--protocol=&lt;protocol_name&gt; 
-P &lt;port_number&gt; 或 --port=&lt;port_number&gt; 
-S &lt;socket_name&gt; 或 --socket=&lt;socket_name&gt;
</code></pre><p><strong>常用的连接方式：</strong></p>
<pre><code>套接字：  mysql -uroot -p123  -S /application/mysql/tmp/mysql.sock
Tcp/Ip： mysql -uroot -p123 -h 10.0.0.52 -P 3306
</code></pre><h3 id="232-数据库的启动流程">2.3.2 数据库的启动流程</h3>
<p>
        <a data-fancybox="gallery" href="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214173016498-1014362978.png">
            <img class="mx-auto" alt="img" src="https://images2017.cnblogs.com/blog/1190037/201712/1190037-20171214173016498-1014362978.png" />
        </a>
    </p>
<p>　　mysqld 文件属性</p>
<pre><code>[root@db02 ~]# cd /application/mysql/bin/
[root@db02 bin]# file mysqld
mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
</code></pre><p>mysql.server文件属性</p>
<pre><code>[root@db02 bin]# file ../support-files/mysql.server 
../support-files/mysql.server: POSIX shell script text executable
</code></pre><p>mysqld_safe文件属性</p>
<pre><code>[root@db02 data]# file /application/mysql/bin/mysqld_safe 
/application/mysql/bin/mysqld_safe: POSIX shell script text executable
</code></pre><p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/sqLIH5Otr9gJM1y.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/sqLIH5Otr9gJM1y.png" />
        </a>
    </p>
<p>可以看出mysql.server文件与mysqld_safe文件都是脚本文件，最后都调用mysqld二进制文件进行启动。</p>
<h3 id="233-mysql的关闭方法">2.3.3 mysql的关闭方法</h3>
<p>　　推荐使用的方法:</p>
<pre><code>1、mysqladmin -uroot -p123 shutdown
2、servive mysqld stop
</code></pre><p>　　尽量避免使用kill命令</p>
<p>　　　　mysqladmin命令关闭mysql</p>
<pre><code>[root@db02 bin]# mysqladmin shutdown -uroot -p123
Warning: Using a password on the command line interface can be insecure.
</code></pre><p>　　<strong>perror****命令</strong></p>
<pre><code>[root@db02 bin]# perror 13
OS error code  13:  Permission denied
</code></pre><p>​     perror命令是mysql自带命令，能够查询mysql错误代码的含义。</p>
<h3 id="234-mycnf-配置文件说明">2.3.4 my.cnf 配置文件说明</h3>
<p><strong>功能</strong> <strong>：</strong></p>
<p>　　　　1、影响到服务器进程的启动</p>
<p>　　　　2、影响到客户端程序</p>
<p><strong>配置my.cnf</strong></p>
<p>​         使用不同的&quot;标签&quot;去明确指定影响哪部分功能</p>
<p>​         服务器端</p>
<pre><code>[server]
    [mysqld] -----&gt; 一般设置此项
    [mysqld_safe]
[client]     ----&gt; 为了方便设置此项
    [mysql] 
    [mysqladmin]
    [mysqldump]
</code></pre><p>　　my.cnf文件配置实例</p>
<pre><code>[root@db02 data]# cat /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
port=3307
[mysql]
socket=/tmp/mysql.sock
user=root
password=123
</code></pre><p>检查进程信息，可以看到与my.cnf配置的相同</p>
<pre><code>[root@db02 data]# ps -ef |grep [my]sql 
root       3411   1918  0 15:52 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe
mysql      3548   3411  0 15:52 pts/1    00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307
</code></pre><p>my.cnf文件的配置</p>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/98nQ3yMtArVCh6a.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/98nQ3yMtArVCh6a.png" />
        </a>
    </p>
<h3 id="235-配置文件的读取过程">2.3.5 配置文件的读取过程</h3>
<pre><code>/etc/my.cnf --&gt; /etc/mysql/my.cnf --&gt; $MYSQL_HOME/my.cnf --&gt; defaults-extra-file=/tmp/clsn.txt --&gt; ~/.my.cnf
</code></pre><p>　　注：假设4个配置文件都存在，同时使用&ndash;defaults-extra-file指定了参数文件，如果这时有一个 &ldquo;参数变量&quot;在5个配置文件中都出现了，那么后面的配置文件中的参数变量值会覆盖前面配置文件中的参数变量值，就是说会使用 ~/.my.cnf 中设置的值</p>
<p>　　如果使用./bin/mysqld_safe 守护进程启动mysql数据库时，使用了 &ndash;defaults-file=&lt;配置文件的绝对路径&gt;参数，这时只会使用这个参数指定的配置文件。</p>
<h2 id="24-mysql多实例配置">2.4 mysql多实例配置</h2>
<h3 id="241-什么是mysql多实例">2.4.1 什么是MySQL多实例？</h3>
<p>
        <a data-fancybox="gallery" href="https://i.loli.net/2020/12/23/czqC3RVDkxGL5PJ.png">
            <img class="mx-auto" alt="img" src="https://i.loli.net/2020/12/23/czqC3RVDkxGL5PJ.png" />
        </a>
    </p>
<p>　　简单地说，MySQL多实例就是在一台服务器上同时开启多个不同的服务端口（如：3306/3307）同时运行多个MySQL服务进程，这些服务进程通过不同的socket监听不同的服务端口来提供服务。</p>
<p>　　这些MySQL多实例共用一套MySQL安装程序，使用不同的my.cnf（也可以相同）配置文件、启动程序（也可以相同）和数据文件。在提供服务时，多实例MySQL在逻辑上看来是各自独立的，他们根据配置文件对应设定值，获得服务器响应数量的资源。</p>
<h3 id="242-mysql多实例的作用与问题">2.4.2 MySQL多实例的作用与问题</h3>
<p><strong>有效利用服务器资源</strong></p>
<p>　　当单个服务器资源有剩余时，可以充分利用剩余的资源提供更多的服务，且可以实现资源的逻辑隔离</p>
<p><strong>节约服务器资源</strong></p>
<p>　　当公司资金紧张，但是数据库又需要各自尽量独立地提供服务，而且，需要主从复制等技术时，多实例就再好不过了</p>
<p>　　MySQL多实例有它的好处，但也有弊端，比如，会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时，整个实例会消耗大量的系统CPU、磁盘I/O等资源，导致服务器上的其他数据库实例提供服务的质量一起下降。</p>
<h3 id="243-多实例配置思路">2.4.3 多实例配置思路</h3>
<pre><code>1     多套配置文件
2     多套 数据
3     多个socket
4     多个端口
5     多个日志文件
6     多个启动程序
</code></pre><h3 id="244-多实例配置过程">2.4.4 多实例配置过程</h3>
<p>前期mysql的安装与1.4MySQL的安装一致，在这里就不再重复（配置完成不要启动）</p>
<p><strong>第一个里程碑：多实例配置文件准备</strong></p>
<pre><code>[root@db02 /]# tree /data/
/data/
├── 3306
│   ├── my.cnf
│   └── mysql
└── 3307
    ├── my.cnf
    └── mysql
</code></pre><p>3306端口my.cnf配置文件</p>
<pre><code>[root@db02 /]# cat data/3306/my.cnf 
[client]
port = 3306
socket = /data/3306/mysql.sock

[mysqld]
user    = mysql
port    = 3306
socket  = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
log-bin = /data/3306/mysql-bin
server-id = 6

[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid
</code></pre><p>3307端口my.cnf配置文件</p>
<pre><code>[root@db02 /]# cat  /data/3307/my.cnf 
[client]
port            = 3307
socket          = /data/3307/mysql.sock

[mysqld]
user    = mysql
port    = 3307
socket  = /data/3307/mysql.sock
basedir = /application/mysql
datadir = /data/3307/data
log-bin = /data/3307/mysql-bin
server-id = 7

[mysqld_safe]
log-error=/data/3307/mysql_3307.err
pid-file=/data/3307/mysqld.pid
</code></pre><p>编写管理脚本3306</p>
<p>
        <a data-fancybox="gallery" href="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif">
            <img class="mx-auto" alt="img" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />
        </a>
     View Code mysql 多实例 启动脚本</p>
<p>编写管理脚本3307</p>
<p>
        <a data-fancybox="gallery" href="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif">
            <img class="mx-auto" alt="img" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />
        </a>
     View Code mysql 多实例 启动脚本</p>
<p>　　注意脚本要给继续权限才能够正常使用</p>
<p>​     第二个里程碑：创建数据目录并授权</p>
<pre><code>[root@db02 /]# mkdir /data/{3306,3307}/data -p
[root@db02 /]# chown -R mysql.mysql /data/
</code></pre><p>​     第三个里程碑：初始化数据</p>
<pre><code>cd /application/mysql/scripts  &amp;&amp; \
./mysql_install_db  --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
./mysql_install_db  --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
</code></pre><p>​     第四个里程碑：创建日志文件</p>
<p>　　　　#5.6.40特殊性：需要创建错误日志文件</p>
<pre><code>touch /data/3306/mysql_3306.err
touch /data/3307/mysql_3307.err
</code></pre><p>​     第五个里程碑：启动多实例</p>
<pre><code>[root@db02 scripts]# /data/3306/mysql start
Starting MySQL...
[root@db02 scripts]# /data/3307/mysql start
Starting MySQL...
</code></pre><p>检查mysql状态</p>
<pre><code>[root@db02 scripts]# ps -ef |grep [my]sql 
root       4341      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid
mysql      4526   4341 13 16:46 pts/1    00:00:03 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/mysql_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306
root       4549      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --pid-file=/data/3307/3307.pid
mysql      4734   4549 51 16:46 pts/1    00:00:08 /application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3307/mysql_3307.err --pid-file=/data/3307/3307.pid --socket=/data/3307/mysql.sock --port=3307
</code></pre><p>检查端口信息</p>
<pre><code>[root@db02 scripts]# netstat  -lntup |grep mysql 
tcp        0      0 :::3306                     :::*                        LISTEN      4526/mysqld         
tcp        0      0 :::3307                     :::*                        LISTEN      4734/mysqld
</code></pre><p>　　至此mysql的多实例就配置完成</p>
<h3 id="245-多实例mysql的使用">2.4.5 多实例mysql的使用</h3>
<p>本地连接方式</p>
<pre><code>mysql -S /data/3306/mysql.sock
mysql -S /data/3307/mysql.sock
</code></pre><h3 id="246-关于mysql多实例的选择">2.4.6 关于mysql多实例的选择</h3>
<pre><code>1、资金紧张性公司的选择 
　　资金紧张，公司业务访问量又不大，但又希望不同的业务的数据库服务各自尽量独立 
2、并发访问不是特别大的业务 
　　当公司业务访问量不太大的时候，服务器的资源基本都是浪费的，这就适合多实例的使用 
3、门户网站应用MySQL多实例场景 
　　配置硬件好的服务器，可以节省IDC机柜空间，跑多实例也不会减少硬件资源不慢的浪费 
　　一般是从库多实例，例如：某部门使用IBM服务器为48核CPU，内存96GB、一台服务器跑3~4个实例：此外，sina网也是用的多实例，内存48GB左右。企业环境中一般将多实例应用在测试环境。
</code></pre><h2 id="25-mysql忘记密码怎么办">2.5 mysql忘记密码怎么办？</h2>
<p>　　第一步：将服务停掉</p>
<pre><code>/etc/init.d/mysqld stop
</code></pre><p>　　第二步：加参数启动服务</p>
<pre><code>cd /application/mysql/bin/ 
mysqld_safe --skip-grant-table --user=mysql --skip-networking &amp;
</code></pre><p>　　这种模式下
　　　　无密码登陆
　　　　网络用户无法登陆
　　　　只能本地登陆
　　　　和授权有关的命令都无法执行</p>
<p>　　第三步：修改密码</p>
<pre><code>[root@db02 3306]# mysql
mysql&gt; update mysql.user set password=password('123') where user='root' and host='localhost';
mysql&gt; flush privileges;
</code></pre><p>　　　　MYSQL5.7 修改密码修改字段 authentication_string</p>
<p>　　第四步：退出重启服务</p>
<pre><code>/etc/init.d/mysqld restart
</code></pre><p>　　第五步：登录验证</p>
<pre><code>mysql -uroot -p123
</code></pre><p>　　至此密码修改成功</p>
<h2 id="26-参考文献">2.6 参考文献</h2>
<pre><code>https://zh.wikipedia.org/wiki/MySQL#%E6%AD%B7%E5%8F%B2  mysql历史
http://blog.51cto.com/oldboy/1728380   MySQL常见错误代码(error code)及代码说明
https://www.abcdocker.com/abcdocker/28   MySQL入门介绍
https://www.abcdocker.com/abcdocker/90   MySQL多实例
http://oldboy.blog.51cto.com    脚本来源
</code></pre>
        </div>

        


        

<div class="post-archive">
    <h2>See Also</h2>
    <ul class="listing">
        
        <li><a href="/post/hello/">Hello world</a></li>
        
        <li><a href="/about/">关于我</a></li>
        
        <li><a href="/archives/">归档</a></li>
        
        <li><a href="/search/">搜索</a></li>
        
        <li><a href="/notebook/">笔记</a></li>
        
    </ul>
</div>


        <div class="post-meta meta-tags">
            
            <ul class="clearfix">
                
                <li><a href='/tags/Mysql'>Mysql</a></li>
                
            </ul>
            
        </div>
    </article>
    
    

    
    
</div>

                    <footer id="footer">
    <div>
        &copy; 2021 <a href="/">matrix By matrix</a>
        
        | <a rel="nofollow" target="_blank" href="http://www.beian.miit.gov.cn/">粤ICP备XXXXXXX号-1</a>
        
    </div>
    <br />
    <div>
        <div class="github-badge">
            <a href="https://gohugo.io/" target="_black" rel="nofollow"><span class="badge-subject">Powered by</span><span class="badge-value bg-blue">Hugo</span></a>
        </div>
        <div class="github-badge">
            <a href="https://www.flysnow.org/" target="_black"><span class="badge-subject">Design by</span><span class="badge-value bg-brightgreen">飞雪无情</span></a>
        </div>
        <div class="github-badge">
            <a href="https://github.com/flysnow-org/maupassant-hugo" target="_black"><span class="badge-subject">Theme</span><span class="badge-value bg-yellowgreen">Maupassant</span></a>
        </div>
    </div>
</footer>


    
    <script type="text/javascript">
        window.MathJax = {
            tex2jax: {
                inlineMath: [['$', '$']],
                processEscapes: true
                }
            };
    </script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script><script src="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src='/js/totop.js?v=0.0.0' async=""></script>



    <script type="text/javascript" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script>




    <script src='/js/douban.js'></script>

                </div>

                <div id="secondary">
    <section class="widget">
        <form id="search" action='/search/' method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="/post/Mysql%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%E7%AE%A1%E7%90%86/" title="Mysql">Mysql</a>
    </li>
    
    <li>
        <a href="/post/hello/" title="Hello world">Hello world</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title"><a href='/categories/'>分类</a></h3>
<ul class="widget-list">
    
    <li><a href="/categories/Mysql/">Mysql (1)</a></li>
    
    <li><a href="/categories/Test/">Test (1)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title"><a href='/tags/'>标签</a></h3>
<div class="tagcloud">
    
    <a href="/tags/Mysql/">Mysql</a>
    
    <a href="/tags/test/">test</a>
    
</div>
    </section>

    
<section class="widget">
    <h3 class="widget-title">友情链接</h3>
    <ul class="widget-list">
        
        <li>
            <a target="_blank" href="https://www.flysnow.org/" title="飞雪无情的博客">飞雪无情的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="http://yuedu.baidu.com/ebook/14a722970740be1e640e9a3e" title="Android Gradle权威指南">Android Gradle权威指南</a>
        </li>
        
    </ul>
</section>


    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
            </div>
        </div>
    </div>
</body>

</html>